#ifndef CONNECT_HANDLER_H
#define CONNECT_HANDLER_H


#include "amqpcpp.h"
#include "amqpcpp/libevent.h"

class Connecter;

/**
 * @brief ConnectHandler类继承自AMQP::LibEventHandler，用于处理与AMQP相关的事件，
 * 如连接建立、心跳接收、连接丢失和错误等。
 */
class ConnectHandler : public AMQP::LibEventHandler {
public:
    /**
     * @brief 构造函数，初始化ConnectHandler对象。
     * 
     * @param evbase 事件基础，用于处理事件驱动的网络编程。
     * @param connecter 连接器对象指针，用于实际的连接操作。
     */
    ConnectHandler(struct event_base *evbase, Connecter *connecter);

    /**
     * @brief 当建立连接时调用。
     * 
     * @param connection TCP连接指针，表示已建立的连接。
     */
    void onConnected(AMQP::TcpConnection *connection) override;

    /**
     * @brief 当接收到心跳时调用。
     * 
     * @param connection TCP连接指针，表示接收到心跳的连接。
     */
    void onHeartbeat(AMQP::TcpConnection *connection) override;

    /**
     * @brief 当连接丢失时调用。
     * 
     * @param connection TCP连接指针，表示失去的连接。
     */
    void onLost(AMQP::TcpConnection *connection) override;

    /**
     * @brief 当发生错误时调用。
     * 
     * @param connection TCP连接指针，表示发生错误的连接。
     * @param message 错误信息，描述发生的错误。
     */
    void onError(AMQP::TcpConnection *connection, const char *message) override;

private:
    /**
     * @brief 连接器对象指针，用于保存连接器的信息，以便在事件处理时使用。
     */
    Connecter *connecter_;
};

#endif // CONNECT_HANDLER_H